package com.gem.day06;

/**
 * 本类用来演示Java23种设计模式之一:
 * 单例设计模式 
 * 应用场景: 保证当前系统中某一个类的实例有且只有一个!!!
 * 
 * @author easonsy
 * 2020年7月23日 上午11:20:18
 */
public class SingeltonDemo {
	//3.提供一个静态的属性返回当前对象
	//private static SingeltonDemo sd = new SingeltonDemo();

	//使用双重锁验证
	private static volatile SingeltonDemo sd;

	//1.私有化构造方法 -- 外界不能通过new来创建新对象
	private SingeltonDemo() {

	}

	//2.提供一个公开静态的方法来创建当前类的对象
	public static SingeltonDemo getInstance() {
		//饿汉单例模式 -- 迫切加载创建对象
		//return sd;

		//懒汉单例模式 -- 延迟创建对象
		if (sd == null) {
			//线程同步加锁
			synchronized (SingeltonDemo.class) {
				if (sd == null) {
					sd = new SingeltonDemo();
				}
			}
		}
		return sd;
	}
}
